function foo(x, y) {
    console.log(this.a, x + y);
}
var obj = {
    a: 1
}
// foo.call(obj, 1, 2)  
//使用call将foo函数内的this强制指向obj(也就是第一个参数)，并且还可以接收参数给foo并帮他执行
// foo.apply(obj, [1, 2]) 
//使用apply将foo函数内的this强制指向obj(也就是第一个参数)，并且还可以传参数给foo并帮他执行，
// 但接收的参数必须用[]框起来
const bar = foo.bind(obj, 2, 3)
bar(4)
//使用apply将foo函数内的this强制指向obj(也就是第一个参数)，但不帮foo执行，而是返回一个新的函数，再进行调用执行
//同时bind内可以接收参数，返回的新函数也可以接收参数